﻿Public Class Bewerkgebruiker
    Dim users As New Users
    Dim LoginService As New LoginService
    Dim incidents As New Incidents
    'lokale opslag
    Dim userid As Integer
    Dim userpassword As String
    Dim nieuwegebruiker As Boolean = False

    Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wachtwoordresetten_CB.CheckedChanged, Geblokkeerd_CB.CheckedChanged, resetpassword_CB.CheckedChanged
        Nieuwpw_TB.Enabled = wachtwoordresetten_CB.Checked
        Nieuwpw2_TB.Enabled = wachtwoordresetten_CB.Checked
        Nieuwpw_TB.Text = ""
        Nieuwpw2_TB.Text = ""
    End Sub

    Public Function weergeefGebruiker(ByVal ovnr As String, Optional ByVal nieuw As Boolean = False) 'nieuw = als er een nieuwe gebruiker wordt gemaakt.
        'Alle informatie wordt uit de database gehaald en in de variabelen gezet.
        ComboBox1.Items.Clear()
        ComboBox1.Items.Add("0: Leerling")
        ComboBox1.Items.Add("1: (niet gebruikt)")
        ComboBox1.Items.Add("2: Docent")
        ComboBox1.Items.Add("3: Beheerder")

        If nieuw = False Then
            users.LoadFromDB(ovnr)
            CreatedAt_TB.Text = users.created_at
            UpdatedAt_TB.Text = users.updated_at
            Klas_TB.Text = users.klas
            Naam_TB.Text = users.name
            Ovnummer_TB.Text = users.ovnummer
            Geblokkeerd_CB.Checked = users.disabled
            userpassword = users.encrypted_password
            ComboBox1.SelectedIndex = users.level
            userid = users.uId
            Geblokkeerd_CB.Checked = users.disabled
            resetpassword_CB.Checked = users.resetpassword
            'incidenten weergeven
            If incidents.LoadAllFromDB() = "True" Then
                Dim inbehandelingcount As Integer = 0
                Dim opencount As Integer = 0
                Dim geslotencount As Integer = 0
                For Each row As DataRow In incidents.IncidentsDataSet.Tables("Table").Rows()
                    If row.Item("behandelaar").ToString() = users.ovnummer Then
                        IncidentenListview.Items.Add(row.Item("id")).ToString()
                        IncidentenListview.Items(IncidentenListview.Items.Count - 1).SubItems.Add(row.Item("apparaat")).ToString()
                        IncidentenListview.Items(IncidentenListview.Items.Count - 1).SubItems.Add(row.Item("categorie")).ToString()
                        IncidentenListview.Items(IncidentenListview.Items.Count - 1).SubItems.Add(row.Item("status")).ToString()
                        If (row.Item("status").ToString() = "Inbehandeling") Then
                            inbehandelingcount = inbehandelingcount + 1
                        ElseIf (row.Item("status").ToString() = "Gesloten") Then
                            geslotencount = geslotencount + 1
                        ElseIf (row.Item("status").ToString() = "Geopend") Then
                            opencount = opencount + 1
                        End If
                    End If
                Next
                Incidentencount_Label.Text = "Incidenten: " + opencount.ToString + " open, " + inbehandelingcount.ToString + " in behandeling, " + geslotencount.ToString + " gesloten."
            End If

            If Not (My.Settings.localuserlevel = "3") Then 'Beheerders kunnen alles: Beheerders kunnen ook andere beheerders aanpassen.
                If (Not My.Settings.localuserovnummer = ovnr) Then
                    If ((Convert.ToInt32(My.Settings.localuserlevel)) < (users.level + 1)) Then
                        ComboBox1.Enabled = False
                        Geblokkeerd_CB.Enabled = False
                        wachtwoordresetten_CB.Enabled = False
                        resetpassword_CB.Enabled = False
                        Klas_TB.Enabled = False
                        Naam_TB.Enabled = False
                        Ovnummer_TB.Enabled = False
                        RemoveUser_PB.Visible = False
                        Opslaan_PB.Visible = False
                    End If
                End If
            End If
        Else
            'Nieuwe gebruiker
            Me.Size = New Point(335, 422)
            wachtwoordresetten_CB.Enabled = False
            wachtwoordresetten_CB.Checked = True
            nieuwegebruiker = nieuw
            CreatedAt_TB.Text = users.getDate()
            UpdatedAt_TB.Text = users.getDate()
            RemoveUser_PB.Visible = False
        End If

        Me.Show()
        Return True
    End Function

    Private Sub Opslaan_PB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Opslaan_PB.Click
        If (My.Settings.localuserovnummer = users.ovnummer) Then
            If (ComboBox1.SelectedIndex > My.Settings.localuserlevel) Then
                MsgBox("Kan de gebruiker niet bijwerken: Rechten mogen niet hoger zijn dan uw rechten (" + My.Settings.localuserlevel + ").")
                Exit Sub
            End If
        ElseIf (Not My.Settings.localuserlevel = 3) And (ComboBox1.SelectedIndex >= My.Settings.localuserlevel) Then
            MsgBox("Kan de gebruiker niet bijwerken: Rechten mogen alleen lager zijn dan uw rechten (" + My.Settings.localuserlevel + ").")
            Exit Sub
            'ElseIf Not Ovnummer_TB.Text = Ovnummer_TB.Text.Trim Then
            '   MsgBox("Het OVnummer mag geen vreemde tekens bevatten.")
            '   Exit Sub
        End If

        If (My.Settings.localuserovnummer = users.ovnummer) Then
            If (ComboBox1.SelectedIndex < My.Settings.localuserlevel) Then
                Dim beheerdersCount As Integer = 1
                For Each row As DataRow In users.UsersDataSet.Tables("Table").Rows()
                    If row.Item("level").ToString() = 3 And (Not row.Item("ovnummer").ToString() = My.Settings.localuserovnummer) Then
                        beheerdersCount = +1
                    End If
                Next
                If beheerdersCount = 1 Then
                    MsgBox("Kan de gebruiker niet bijwerken: Rechten mogen niet verlaagd worden (enigste beheerder).")
                    Exit Sub
                End If
            End If
        End If

        Dim uid = users.uId
        users.clearData()
        users._uId = uid
        users.klas = Klas_TB.Text.Replace(" ", "")
        users.name = Naam_TB.Text
        users.ovnummer = Ovnummer_TB.Text
        users.disabled = Geblokkeerd_CB.Checked
        users.resetpassword = resetpassword_CB.Checked
        users.level = ComboBox1.SelectedIndex
        If wachtwoordresetten_CB.Checked = True Then
            If (Nieuwpw_TB.Text = Nieuwpw2_TB.Text) Then
                users.encrypted_password = LoginService.MD5(Nieuwpw_TB.Text)
                users.SaveToDB(userid, nieuwegebruiker)
            Else
                MsgBox("Het wachtwoord klopt niet!")
                Exit Sub
            End If
        Else
            users.encrypted_password = userpassword
            users.SaveToDB(userid, nieuwegebruiker)
        End If
        If Ovnummer_TB.Text = My.Settings.localuserovnummer Then 'De ingelogde gebruiker is zichzelf aan het bewerken
            MsgBox("U bent uzelf aan het bewerken. De gemaakte wijzigingen zijn van kracht zodra u opnieuw inlogt.", MsgBoxStyle.Information)
        End If
        AdminmenuV2.refreshCurrentList()
        Me.Close()
    End Sub

    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Afbreken_PB.Click
        Me.Close()
    End Sub
    Private Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RemoveUser_PB.Click
        Dim msg As MsgBoxResult = _
        MsgBox("Weet u zeker dat u " + users.name + " wilt verwijderen?", MsgBoxStyle.YesNo, "Verwijderen: " + users.ovnummer)

        If msg = MsgBoxResult.Yes Then
            users.DeleteFromDB(users.ovnummer)
            users.clearData()
            AdminmenuV2.refreshCurrentList()
            Me.Close()
        End If
    End Sub

    Private Sub IncidentenListview_Doubleclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IncidentenListview.DoubleClick
        If IncidentenListview.SelectedItems.Count.ToString >= 1 Then
            Bewerkincident.weergeefIncident(IncidentenListview.SelectedItems.Item(0).SubItems.Item(0).Text.ToString)
        End If
    End Sub

    Private Sub Bewerkgebruiker_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class